package com.example.tally.utils;

import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.text.Editable;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;

import com.example.tally.R;
/*
* 定义软键盘以及逻辑编写
* */
public class KeyBoardUtils {
    private final Keyboard key;   //自定义键盘
    private KeyboardView keyboardView;
    private EditText editText;

    public interface OnEnsureListener{
        public void OnEnsure();
    }
    OnEnsureListener onEnsureListener;

    public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
        this.onEnsureListener = onEnsureListener;
    }

    public KeyBoardUtils(KeyboardView keyboardView, EditText editText) {
        this.keyboardView = keyboardView;
        this.editText = editText;
        this.editText.setInputType(InputType.TYPE_NULL);   //取消弹出系统键盘
        key = new Keyboard(this.editText.getContext(), R.xml.key);

        this.keyboardView.setKeyboard(key);   //设置要显示键盘的样式
        this.keyboardView.setEnabled(true);  //定义键盘可以使用
        this.keyboardView.setPreviewEnabled(false);   //定义键盘可以进行预览
        this.keyboardView.setOnKeyboardActionListener(listener);   //设置键盘按钮点击的监听
    }

    KeyboardView.OnKeyboardActionListener listener = new KeyboardView.OnKeyboardActionListener() {
        @Override
        public void onPress(int primaryCode) {

        }

        @Override
        public void onRelease(int primaryCode) {

        }

        @Override
        public void onKey(int primaryCode, int[] keyCodes) {
            Editable editable = editText.getText();   //得到editText的值
            int start = editText.getSelectionStart();   //获取光标位置
            switch (primaryCode){
                case Keyboard.KEYCODE_DELETE:    //点击删除
                    if (editable!=null && editable.length()>0) {
                        if (start>0){
                            editable.delete(start-1,start);
                        }
                    }
                    break;
                case Keyboard.KEYCODE_CANCEL:    //点击清零
                    editable.clear();
                    break;
                case Keyboard.KEYCODE_DONE:     //点击完成
                    onEnsureListener.OnEnsure();    //通过接口回调的方法，当点击确定，调用
                    break;
                default:        //其他数字直接插入
                    editable.insert(start,Character.toString((char)primaryCode));
                    break;
            }
        }
        @Override
        public void onText(CharSequence text) {
        }
        @Override
        public void swipeLeft() {
        }
        @Override
        public void swipeRight() {
        }
        @Override
        public void swipeDown() {
        }
        @Override
        public void swipeUp() {
        }
    };

//    显示键盘
    public void showKeyboard(){
        int visibility = keyboardView.getVisibility();   //获取键盘正在显示的状态
        if (visibility == View.INVISIBLE || visibility == View.GONE) {
            keyboardView.setVisibility(View.VISIBLE);   //VISIBLE:看的见  INVISIBLE：看不见但是占地方
        }
    }

//    隐藏键盘
    public void hideKeyboard(){
        int visibility = keyboardView.getVisibility();   //获取键盘正在显示的状态
        if (visibility == View.VISIBLE || visibility == View.INVISIBLE) {
            keyboardView.setVisibility(View.GONE);
        }
    }
}
